GraphRAG 实现方法:从知识图谱构建到全局推理
传统 RAG 主要解决“局部检索”问题,而 GraphRAG 面向的是全局理解(global sensemaking)任务,例如“数据集中有哪些核心主题?”这类问题无法通过简单向量检索得到答案。
根据论文 From Local to Global: A GraphRAG Approach to Query-Focused Summarization,GraphRAG 通过知识图谱 + 社区层次摘要 + Map-Reduce 推理实现全局问答能力。
本文将完整拆解 GraphRAG 的实现流程、关键算法选择与工程落地方式,并用 Mermaid 绘制核心流程图。
一、GraphRAG 总体架构
GraphRAG 的核心思想:
- 使用 LLM 从文本中抽取实体、关系与事实
- 构建知识图谱
- 对图进行社区划分(层次化)
- 为每个社区生成摘要(自底向上)
- 查询时对社区摘要进行 Map-Reduce 式推理
论文给出的整体流程如图所示。
GraphRAG 全流程图
flowchart TD A[Source Documents] --> B[Text Chunking] B --> C[LLM: Entity & Relation Extraction] C --> D[Knowledge Graph Construction] D --> E[Hierarchical Community Detection] E --> F[Leaf Community Summaries] F --> G[Higher-Level Summaries] G --> H[Community Summary Index] H --> I[Query] I --> J[Map: Partial Answers from Communities] J --> K[Reduce: Global Answer] K --> L[Final Response]
二、第一阶段:构建知识图谱
GraphRAG 的关键创新之一,是用 LLM 构建语义图索引,而不是向量索引。
1. 文本切分(Chunking)
源文档首先被拆分为 text chunks。
设计权衡:
- chunk 大 → LLM 调用次数少,但前文信息召回下降
- chunk 小 → 召回高,但成本增加
论文指出 chunk 大小是一个关键设计参数。
2. 实体与关系抽取
每个 chunk 通过 Prompt 让 LLM 抽取:
- 实体(Entity)
- 关系(Relationship)
- 声明/事实(Claims)
论文示例中:
- NeoChip
- Quantum Systems
- 收购关系
- 上市事实
抽取流程图
flowchart LR A[Text Chunk] --> B[LLM Prompt: Extract Entities] --> C[LLM Prompt: Extract Relations] --> D[LLM Prompt: Extract Claims] --> E[Structured Triples]
3. 构建知识图谱
抽取结果会:
- 聚合重复实体
- 合并关系
- 统计边权重
- 聚合声明
论文说明:
- 实体成为节点
- 关系成为边
- 重复关系计为边权重
- 声明作为附加属性
图结构形式
Node: Entity
Edge: Relationship (weighted)
Attributes: Description, Claims
三、第二阶段:社区划分(Hierarchical Community Detection)
GraphRAG 的核心突破在于:利用图的模块性(modularity)进行分区。
论文采用:
- Leiden 算法
- 层次化递归划分
社区划分流程
flowchart TD A[Knowledge Graph] --> B[Leiden Community Detection] B --> C1[Community Level 1] C1 --> C2[Community Level 2] C2 --> C3[Leaf Communities]
特征:
- 每一层都是 mutually exclusive(互斥)
- 覆盖所有节点
- 构成树状层级结构
这一步是 GraphRAG 与传统 RAG 的本质区别。
四、第三阶段:社区摘要生成(Bottom-Up Summarization)
1. 叶子社区摘要
论文策略:
- 按节点重要性排序
- 依次加入 LLM 上下文
- 直到 token 限制
优先级:
- 高度节点优先
- 边与声明随后
2. 高层社区摘要
如果 token 超限:
- 用子社区摘要替代原始元素摘要
- 递归向上汇总
论文描述为:
自底向上生成层次摘要
层级摘要示意图
flowchart TD A[Leaf Community A] B[Leaf Community B] A --> C[Level 2 Summary] B --> C C --> D[Root Summary]
最终形成一个图摘要索引(Graph Summary Index)。
五、第四阶段:查询时的 Map-Reduce 推理
这是 GraphRAG 支持全局问题的关键。
论文指出查询过程采用 Map-Reduce 结构。
查询阶段流程
flowchart TD Q[User Query] Q --> M1[Community Summary 1] Q --> M2[Community Summary 2] Q --> M3[Community Summary N] M1 --> A1[Partial Answer 1] M2 --> A2[Partial Answer 2] M3 --> AN[Partial Answer N] A1 --> R[Reduce Step] A2 --> R AN --> R R --> Final[Global Answer]
1. Map 阶段
- 每个社区摘要独立生成部分答案
- 并输出 helpfulness score(0-100)
- score=0 的结果被过滤
2. Reduce 阶段
- 汇总所有 partial answers
- 再做一次 query-focused summarization
- 输出最终全局答案
这一步使系统具备:
- 全局主题抽象能力
- 多社区融合能力
- 高覆盖率
六、与传统 Vector RAG 的对比
| 维度 | Vector RAG | GraphRAG |
|---|---|---|
| 索引方式 | 向量索引 | 图索引 |
| 适合问题 | 局部事实 | 全局主题 |
| 是否支持跨社区推理 | 否 | 是 |
| 是否层级结构 | 否 | 是 |
| 推理结构 | 单阶段 | Map-Reduce |
论文实验证明:
GraphRAG 在“全局理解问题”上显著优于传统 RAG,在答案多样性与覆盖度上都有提升。
七、工程实现建议
1. 技术栈
-
LLM:GPT-4 / 高质量模型
-
图数据库:Neo4j / NebulaGraph
-
社区检测:Leiden(python-igraph)
-
存储:
- 原始图
- 各层社区摘要
- 摘要向量索引(可选)
2. 关键工程优化点
实体对齐(Entity Matching)
论文使用精确字符串匹配,但允许更复杂对齐策略。
社区层级选择
不同层级适合不同类型问题:
- 低层:细节
- 高层:主题
论文对层级选择进行了实验分析。
八、GraphRAG 的本质总结
GraphRAG 并不是简单“图数据库 + RAG”。
它本质上是:
把整个语料库转化为一个可分层压缩的语义图,再通过层次化摘要实现可扩展的全局推理。
关键创新点:
- LLM 驱动知识图谱构建
- 图的模块性用于主题分区
- 层次化社区摘要
- Map-Reduce 式问答结构
九、一句话理解 GraphRAG
传统 RAG 是:
找几段最像的问题相关文本
GraphRAG 是:
先理解整个数据集的结构,再基于结构进行全局回答
这使其特别适用于:
- 战略分析
- 研究综述
- 趋势总结
- 多文档主题抽象
- 企业私有知识库全局洞察